package com.ck.ips.service.report;

import com.ck.common.model.OperationResult;
import com.ck.ips.model.vo.DeviceProgramInfoVO;
import com.ck.ips.model.vo.FileRealTimeDataVO;
import com.ck.ips.model.vo.PlayLogVO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.List;

/**
 * @description: 报表service接口
 * @author: zhanglei
 * @date: 2019/5/10 10:44
 */
public interface ReportFormsService {

    /**
     * 今日终端实时数据
     * @return
     */
    OperationResult<Object> getToDayDeviceInfo();

    /**
     * 今日节目实时统计数据
     * @return
     */
    OperationResult<Object> getToDayProgramInfo();

    /**
     * 统计信息
     * @return
     */
    OperationResult<Object> getStatistics();

    /**
     * 七日未上线终端详情
     * @return
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @param startTime 起始时间
     * @return
     */
    OperationResult<Object> sevenNotLoginDeviceInfo(Integer pageNum, Integer pageSize, String startTime);

    /**
     * 近七日节目发布信息数
     * @return
     */
    OperationResult<Object> sevenProgramInfo();

    /**
     * 近七天单个素材平均每天曝光次数
     * @return
     */
    OperationResult<Object> fileAverageExposureNum();

    /**
     * 近七天已下发的单个终端下载素材量
     * @return
     */
    OperationResult<Object> getFileDownloadNun();

    /**
     * 近7天已下发的单个终端下载节目量
     * @return
     */
    OperationResult<Object> getProgramDownloadNum();

    /**
     * 统计报表-设备状态列表
     * @param deviceGroupId 设备分组id
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return
     */
    OperationResult<Object> getDeviceByGroupId(Long deviceGroupId, Integer pageNum, Integer pageSize);

    /**
     * 报表统计-播放日志-每日
     * @param deviceCode 终端唯一编码
     * @param dayTime 具体某天时间 如：20190514
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return
     */
    OperationResult<Object> reportLogDay(String deviceCode, String dayTime, Integer pageNum, Integer pageSize);

    /**
     * 报表统计-播放日志-每月
     * @param deviceCode 终端唯一编码
     * @param monthTime 具体某月时间 如：201905
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return
     */
    OperationResult<Object> reportLogMonth(String deviceCode, String monthTime, Integer pageNum, Integer pageSize);

    /**
     * 报表统计-播放日志-时段
     * @param deviceCode 终端唯一编码
     * @param dayStartTime 起始时间 如：20190510
     * @param dayEndTime 终止时间 如：20190514
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return
     */
    OperationResult<Object> reportLogTimeFrame(String deviceCode, String dayStartTime, String dayEndTime, Integer pageNum, Integer pageSize);

    /**
     * 近七天终端上线离线状态
     */
    OperationResult<Object> sevenDeviceLineInfo();

    /**
     * 获取某日终端的在线离线状态
     * @param dayTime 时间 如：2019-03-12
     * @param deviceCode 终端唯一编码
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return
     */
    OperationResult<Object> getOnLineInfo(String dayTime, String deviceCode, Integer pageNum, Integer pageSize);

    /**
     * 近7天单个节目平均每天曝光次数
     * @return
     */
    OperationResult<Object> programAverageExposureNum(String programVersion);

    /**
     * 获取终端的某个节目的所有素材分别播放的次数和时长
     * @param deviceCode 终端唯一编码
     * @param programVersionList 节目版本号列表
     * @return 详情
     */
    List<FileRealTimeDataVO> getFileRealTimeData(String deviceCode,List<String> programVersionList);

    /**
     * 报表统计-播放日志-时段-导出
     * @param deviceCode 终端唯一编码
     * @param dayStartTime 起始时间 如：20190510
     * @param dayEndTime 终止时间 如：20190514
     * @return
     */
    List<PlayLogVO> reportLogTimeFrameExcel(String deviceCode, String dayStartTime, String dayEndTime);

    /**
     * 创建监播日志excle
     * @param playLogVOS 详情信息
     * @return excel
     */
    XSSFWorkbook createLogExcel(List<PlayLogVO> playLogVOS, String playDate);

    /**
     * 增播减播下发失败统一查询
     * @param pageNum 当前页码
     * @param pageSize 每页条数
     * @return 下发失败详情列表
     */
    OperationResult<Object> addSubFailedInfo(Integer pageNum, Integer pageSize);

    /**
     * 今日解绑终端数
     * @return 今日终端解绑数量
     */
    OperationResult<Object> todayUntieDeviceNum();

    /**
     * 新ui首页今日节目和素材发布信息（含自营和api）
     * @return 今日节目统计信息
     */
    OperationResult<Object> getNewToDayProgramInfo();

    /**
     * 查询今日新增终端信息列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    OperationResult<Object> listTodayNewDeviceInfo(Integer pageNum, Integer pageSize);

    /**
     * 当前设备广告数量统计
     * @return 设备广告数量统计
     */
    OperationResult<Object> deviceProgramInfo();

    /**
     * 广告数量分类查看设备详情
     * @param type 广告数量分类
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return 设备详情
     */
    OperationResult<Object> deviceProgramDetail(Integer type, Integer pageNum, Integer pageSize);

    /**
     * 导出excel
     * @param type 广告数量分类
     * @return 设备详情
     */
    List<DeviceProgramInfoVO> deviceProgramExcel(Integer type);
}
